enum token_value {
      NAME        NUMBER    END
      PLUS='+'    MINUS='-'    MUL='*'    DIV='/'
      PRINT=';'    ASSIGN='='    LP='('    RP=')'
  };
  token_value curr_tok;

double expr()                   // ñêëàäûâàåò  è âû÷èòàåò
  {
      double left = term();

      for(;;)                     // ``íàâñåãäà``
          switch(curr_tok) {
          case PLUS:
              get_token();        // åñò '+'
              left += term();
              break;
          case MINUS:
              get_token();        // åñò '-'
              left -= term();
              break;
          default:
              return left;
          }
  }
double expr();    // áåç ýòîãî íåëüçÿ
double term()                    // óìíîæàåò è ñêëàäûâàåò
  {
      double left = prim();

      for(;;)
          switch(curr_tok)    {
          case MUL:
              get_token();         // åñò '*'
              left *= prim();
              break;
          case DIV:
              get_token();         // åñò '/'
              double d = prim();
              if (d == 0) return error("äåëåíèå íà 0");
              left /= d;
              break;
          default:
              return left;
          }
  }

double prim()                 // îáðàáàòûâàåò primary (ïåðâè÷íûå)
  {
      switch (curr_tok) {
      case NUMBER:              // êîíñòàíòà ñ ïëàâàþùåé òî÷êîé
          get_token();
          return number_value;
      case NAME:
          if (get_token() == ASSIGN) {
              name* n = insert(name_string);
              get_token();
              n->value = expr();
              return n->value;
          }
          return look(name-string)->value;
      case MINUS:               // óíàðíûé ìèíóñ
          get_token();
          return -prim();
      case LP:
          get_token();
          double e = expr();
          if (curr_tok != RP) return error("äîëæíà áûòü )");
          get_token();
          return e;
      case END:
          return 1;
      default:
          return error("äîëæíî áûòü primary");
      }
  }
struct name {
      char* string;
      char* next;
      double value;
  }

  name* look(char*);
  name* insert(char*);
  char ch;
  do {    // ïðîïóñêàåò ïðîïóñêè çà èñêëþ÷åíèåì '\n'

      if(!cin.get(ch)) return curr_tok = END;

  } while (ch!='\n' && isspace(ch));

//----------------------------
// Line of Unnessesary comment's
// Second Line


